package ge.engine;


import ge.modules.Module;

import java.util.ArrayList;


public class Actor implements Module
{
	private ArrayList<Module> modules,newmodules,removemodules;
	
	
	/**
	 * 	The constructor initializes the features of Actor
	 */
	public Actor() 
	{
		modules = new ArrayList<Module>();
		newmodules = new  ArrayList<Module>();
		removemodules = new ArrayList<Module>();
	}
	/**
	 * 	Add a new module at the actor
	 * @param m Module
	 */
	public void add(Module m)
	{
		newmodules.add(m);
	}
	/**
	 * 	Removes a module at the level
	 * @param m Module
	 */
	public void remove(Module m)
	{
		removemodules.add(m);
	}
	/**
	 * 	Update all its modules
	 */
	public void update()
	{
		if(newmodules.size() > 0)
		{
			for(Module m : newmodules)
			{
				if(modules.contains(m)) //Lo quita y para que no existan repetidos
					modules.remove(m);
				
				modules.add(m);
			}
			newmodules.clear();
		}
	 
		for (Module m  : modules) 
		{
				m.update();	
		}
		 
		if(removemodules.size() > 0)
		{
			for(Module m : removemodules)
			{
				modules.remove(m);
			}
			removemodules.clear();
		}
	}
	
	/**
	 * 	Draw all its modules
	 */
	public void draw()
	{
		for (Module m  : modules) 
		{
			m.draw();
		}
	}
	/**
	 * 	Deletes your self from the level and all your components
	 */
	public void delete()
	{
		for (Module m  : modules) 
		{
			m.delete();
			 
		}
		modules.clear();
		
		//Lo borramos del escenario
		if(Engine.getCurrentLevel().getModules().contains(this))
			Engine.getCurrentLevel().remove(this);
		else if(Engine.getGlobalActor().getModules().contains(this))
			Engine.getGlobalActor().remove(this);
	}
	
	public ArrayList<Module> getModules()
	{
		return modules;
	}
}
